package algocity.modelo.entidad;

import algocity.modelo.Posicion;

public class Territorio {
	
	private int tamanioX;
	private int tamanioY;
	private Superficie[][] matriz;
	
	public Territorio(){
		this.tamanioX = 1;
		this.tamanioY = 1;
		matriz = new Superficie[1][1];
	}
	
	public void setTamanio(int tamanioX, int tamanioY){
		this.tamanioX = tamanioX;
		this.tamanioY = tamanioY;
		matriz = new Superficie[tamanioX+1][tamanioY+1];
	}
	
	public void inicializarTerritorio(){

		for (int x=1; x<=tamanioX*80/100; x++){
			for (int y=1; y<=tamanioY; y++){
				agregar(new Tierra(),new Posicion(x,y));
				//System.out.print(x+","+y+" ");
			}
		}
		
		for (int x=1+tamanioX*80/100; x<=tamanioX; x++){
			for (int y=1; y<=tamanioY; y++){
				agregar(new Agua(),new Posicion(x,y));
				//System.out.print(x+","+y+" ");
			}
		}
	}
	
	public void agregar(Superficie unaSuperficie, Posicion unaPosicion){
		matriz[unaPosicion.getPosX()][unaPosicion.getPosY()] = unaSuperficie;
		unaSuperficie.agregarse(this,unaPosicion);
	}
	
	public Superficie getSuperficie(Posicion unaPosicion){
		return matriz[unaPosicion.getPosX()][unaPosicion.getPosY()];
	}
	
	public void repartirServicioEnZona(int rango, Posicion centro, Servicio unServicio){
		int x = centro.getPosX();
		int y = centro.getPosY();
		
		for (int i=x-rango; i<=x+rango; i++){
			for (int j=y-rango; j<=y+rango; j++){
				if (i>0 && j>0 && i<=this.tamanioX && j<=this.tamanioY) {
					matriz[i][j].agregarServicio(unServicio);
				}
			}
		}
		
	}
	
	public Zona getZona(int rango, Posicion centro){
		int x = centro.getPosX();
		int y = centro.getPosY();
		Zona unaZona = new Zona();
		for (int i=x-rango; i<=x+rango; i++){
			for (int j=y-rango; j<=y+rango; j++){
				if (i>0 && j>0 && i<=this.tamanioX && j<=this.tamanioY) {
					unaZona.addSuperficie(getSuperficie(new Posicion(i,j)));
				}
			}
		}
		return unaZona;
	}
	
	public int getTamanioX(){
		return this.tamanioX;
	}
	public int getTamanioY(){
		return this.tamanioY;
	}
}
